signature MAYBE_VAR =
  sig
    exception Unbound of V.var
    datatype 'a maybeVar = Literal of 'a | Variable of V.var
    val dTRT : (('a -> 'b) * (V.var -> 'b)) -> ('a maybeVar) -> 'b
    val maybeVarString : ('a -> string) -> ('a maybeVar) -> string
    val eq : (('a * 'a) -> bool) -> ('a maybeVar * 'a maybeVar) -> bool
    val le : (('a * 'a) -> bool) -> ('a maybeVar * 'a maybeVar) -> bool
  end
